In [1]:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from raceplotly.plots import barplot
In [2]:
races_data = pd.read_csv('races.csv')
diverstanding_data = pd.read_csv('driver_standings.csv')
drivers_data = pd.read_csv('drivers.csv')
constructorstanding_data = pd.read_csv('constructor_standings.csv')
constructors_data = pd.read_csv('constructors.csv')
constructor_race_data = pd.read_csv('constructor_results.csv')
qualifying_data = pd.read_csv('qualifying.csv')
qualifying_data.rename(columns ={'position':'quali_position'},inplace=True)
constructors_data.drop(columns=['url'],inplace=True)
constructors_data.rename(columns={'name':'constructor_name','nationality':'constructor_nationality'},inplace=True)
In [3]:
data_2011 = races_data.where(races_data['year']==2011).dropna()
data_2011 = data_2011.merge(diverstanding_data,on='raceId').dropna()
data_2011 = data_2011.merge(drivers_data,on='driverId').dropna()
data_2011.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2011 = data_2011.sort_values(['round','position'])
data_2011 = data_2011.merge(qualifying_data,on=['raceId','driverId'])
data_2011.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2011 = data_2011.merge(constructors_data,on='constructorId')
data_2011 = data_2011.sort_values(['round','position'])
data_2011
Out[3]:
year round circuitId name points position positionText wins driverRef code ... surname constructorId number quali_position q1 q2 q3 constructorRef constructor_name constructor_nationality
0 2011.0 1.0 1.0 Australian Grand Prix 25.0 1 1 1 vettel VET ... Vettel 9 1 1 1:25.296 1:24.090 1:23.529 red_bull Red Bull Austrian
38 2011.0 1.0 1.0 Australian Grand Prix 18.0 2 2 0 hamilton HAM ... Hamilton 1 3 2 1:25.384 1:24.595 1:24.307 mclaren McLaren British
76 2011.0 1.0 1.0 Australian Grand Prix 15.0 3 3 0 petrov PET ... Petrov 4 10 6 1:25.543 1:25.582 1:25.247 renault Renault French
113 2011.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 alonso ALO ... Alonso 6 5 5 1:25.707 1:25.242 1:24.974 ferrari Ferrari Italian
1 2011.0 1.0 1.0 Australian Grand Prix 10.0 5 5 0 webber WEB ... Webber 9 2 3 1:25.900 1:24.658 1:24.395 red_bull Red Bull Austrian
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
264 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 22 22 0 kovalainen KOV ... Kovalainen 205 20 19 1:15.068 \N \N lotus_racing Lotus Malaysian
446 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 23 23 0 liuzzi LIU ... Liuzzi 164 23 21 1:16.631 \N \N hrt HRT Spanish
301 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 24 24 0 ambrosio DAM ... d'Ambrosio 166 25 23 1:17.019 \N \N virgin Virgin British
302 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 25 25 0 glock GLO ... Glock 166 24 24 1:17.060 \N \N virgin Virgin British
447 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 27 27 0 ricciardo RIC ... Ricciardo 164 22 22 1:16.890 \N \N hrt HRT Spanish

448 rows × 21 columns

In [4]:
data_teams_2011 = races_data.where(races_data['year']==2011).dropna()
data_teams_2011 = data_teams_2011.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2011 = data_teams_2011.merge(constructors_data,on='constructorId').dropna()
data_teams_2011.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2011 = data_teams_2011.sort_values(['round','position'])
data_teams_2011
Out[4]:
year round circuitId name points position positionText wins constructorRef constructor_name
171 2011.0 1.0 1.0 Australian Grand Prix 35.0 1 1 1 red_bull Red Bull
152 2011.0 1.0 1.0 Australian Grand Prix 26.0 2 2 0 mclaren McLaren
114 2011.0 1.0 1.0 Australian Grand Prix 18.0 3 3 0 ferrari Ferrari
133 2011.0 1.0 1.0 Australian Grand Prix 15.0 4 4 0 renault Renault
95 2011.0 1.0 1.0 Australian Grand Prix 4.0 5 5 0 toro_rosso Toro Rosso
... ... ... ... ... ... ... ... ... ... ...
113 2011.0 19.0 18.0 Brazilian Grand Prix 41.0 8 8 0 toro_rosso Toro Rosso
37 2011.0 19.0 18.0 Brazilian Grand Prix 5.0 9 9 0 williams Williams
75 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 10 10 0 lotus_racing Lotus
225 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 11 11 0 hrt HRT
56 2011.0 19.0 18.0 Brazilian Grand Prix 0.0 12 12 0 virgin Virgin

226 rows × 10 columns

In [5]:
teams_color_2011 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Renault':dict(color='#FFF500'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'HRT':dict(color='#5d4b25'),
                    'Virgin':dict(color='#ff2e15')
                   }

driver_teams_color_2011 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'HAM':dict(color='#FF8700',dash='solid'),
                           'BUT':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'ROS':dict(color='#00D2BE',dash='solid'),
                           'MSC':dict(color='#00D2BE',dash='dash'),
                           
                           'HEI':dict(color='#FFF500',dash='solid'),
                           'SEN':dict(color='#FFF500',dash='dash'),
                           'PET':dict(color='#FFF500',dash='dashdot'),
                           
                           'BAR':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'SUT':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'KOB':dict(color='#960000',dash='solid'),
                           'PER':dict(color='#960000',dash='dash'),
                           'DLR':dict(color='#960000',dash='dashdot'),
                           
                           'BUE':dict(color='#011AE3',dash='solid'),
                           'ALG':dict(color='#011AE3',dash='dash'),
                           
                           'KOV':dict(color='#000000',dash='solid'),
                           'TRU':dict(color='#000000',dash='dash'),
                           'CHA':dict(color='#000000',dash='dashdot'),
                           
                           'KAR':dict(color='#5d4b25',dash='solid'),
                           'RIC':dict(color='#5d4b25',dash='dash'),
                           'LIU':dict(color='#5d4b25',dash='dashdot'),
                           
                           'GLO':dict(color='#ff2e15',dash='solid'),
                           'DAM':dict(color='#ff2e15',dash='dash')
                          }
In [6]:
constructors = data_teams_2011['constructor_name'].unique()
drivers = data_2011['code'].unique()

c = data_2011.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2011 = data_2011.merge(c,on='code').sort_values(['round','Final'])

fig = px.bar(data_2011, x="code", y="points", color='constructorRef',
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [7]:
#data_teams_2011.rename({'name_y':'team','name_x':'race'}, axis=1, inplace=True)
c = data_teams_2011.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2011 = data_teams_2011.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2011, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,650])
fig.show()
In [8]:
fig1 = go.Figure()
fig2 = go.Figure()

for i in drivers:
    d = data_2011.where(data_2011['code'] == i).dropna()
    
    fig1.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=driver_teams_color_2011[i]['color'],
                                          opacity=0.75),
                              line=dict(dash=driver_teams_color_2011[i]['dash'])))
    
    fig2.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=driver_teams_color_2011[i]['color'],
                                          opacity=0.75),
                              line=dict(dash=driver_teams_color_2011[i]['dash'])))
fig1.show()
In [9]:
fig2['layout']['yaxis']['autorange'] = "reversed"
fig2.show()
In [10]:
fig3 = go.Figure()
fig4 = go.Figure()

for i in constructors:
    d = data_teams_2011.where(data_teams_2011['constructor_name'] == i).dropna()
    
    fig3.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=teams_color_2011[i]['color'],opacity=0.75)))
    
    fig4.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=teams_color_2011[i]['color'],opacity=0.75)))
fig3.show()
In [11]:
fig4['layout']['yaxis']['autorange'] = "reversed"
fig4.show()
In [12]:
teams_color_2012 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'HRT':dict(color='#5d4b25'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2012 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'HAM':dict(color='#FF8700',dash='solid'),
                           'BUT':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'ROS':dict(color='#00D2BE',dash='solid'),
                           'MSC':dict(color='#00D2BE',dash='dash'),
                           
                           'RAI':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           'DAM':dict(color='#000000',dash='dashdot'),
                           
                           'SEN':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'HUL':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'KOB':dict(color='#960000',dash='solid'),
                           'PER':dict(color='#960000',dash='dash'),
                           
                           'RIC':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'KOV':dict(color='#3c5749',dash='solid'),
                           'PET':dict(color='#3c5749',dash='dash'),
                           
                           'KAR':dict(color='#5d4b25',dash='solid'),
                           'DLR':dict(color='#5d4b25',dash='dash'),
                           
                           'GLO':dict(color='#6E0000',dash='solid'),
                           'PIC':dict(color='#6E0000',dash='dash')
                         }
In [13]:
data_2012 = races_data.where(races_data['year']==2012).dropna()
data_2012 = data_2012.merge(diverstanding_data,on='raceId').dropna()
data_2012 = data_2012.merge(drivers_data,on='driverId').dropna()
data_2012.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2012 = data_2012.sort_values(['round','position'])
data_2012 = data_2012.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2012.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2012 = data_2012.merge(constructors_data,on='constructorId').dropna()
data_2012

drivers = data_2012['code'].unique()
drivers
Out[13]:
array(['BUT', 'HAM', 'VET', 'WEB', 'ALO', 'MAS', 'KOB', 'PER', 'RAI',
       'GRO', 'DAM', 'RIC', 'VER', 'DIR', 'HUL', 'ROS', 'MSC', 'MAL',
       'SEN', 'GLO', 'PIC', 'KOV', 'PET', 'DLR', 'KAR'], dtype=object)
In [14]:
c = data_2012.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2012 = data_2012.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2012, x="code", y="points", color="constructorRef",
  animation_frame="name", animation_group="code", range_y=[0,300])
fig.show()
In [15]:
fig5 = go.Figure()
fig6 = go.Figure()
for i in drivers:
    d = data_2012.where(data_2012['code'] == i).dropna().sort_values(by='round') 
    
    fig5.add_traces(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=driver_teams_color_2012[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2012[i]['dash'])))
    
    fig6.add_traces(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=driver_teams_color_2012[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2012[i]['dash'])))
fig5.show()
In [16]:
fig6['layout']['yaxis']['autorange'] = "reversed"
fig6.show()
In [17]:
data_teams_2012 = races_data.where(races_data['year']==2012).dropna()
data_teams_2012 = data_teams_2012.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2012 = data_teams_2012.merge(constructors_data,on='constructorId').dropna()
data_teams_2012.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2012 = data_teams_2012.sort_values(['round','position'])

constructors = data_teams_2012['constructor_name'].unique()
data_teams_2012
Out[17]:
year round circuitId name points position positionText wins constructorRef constructor_name
40 2012.0 1.0 1.0 Australian Grand Prix 40.0 1 1 1 mclaren McLaren
200 2012.0 1.0 1.0 Australian Grand Prix 30.0 2 2 0 red_bull Red Bull
160 2012.0 1.0 1.0 Australian Grand Prix 12.0 3 3 0 sauber Sauber
180 2012.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 ferrari Ferrari
140 2012.0 1.0 1.0 Australian Grand Prix 6.0 5 5 0 lotus_f1 Lotus F1
... ... ... ... ... ... ... ... ... ... ...
79 2012.0 20.0 18.0 Brazilian Grand Prix 76.0 8 8 1 williams Williams
139 2012.0 20.0 18.0 Brazilian Grand Prix 26.0 9 9 0 toro_rosso Toro Rosso
39 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 10 10 0 caterham Caterham
19 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 11 11 0 marussia Marussia
238 2012.0 20.0 18.0 Brazilian Grand Prix 0.0 12 12 0 hrt HRT

239 rows × 10 columns

In [18]:
c = data_teams_2012.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2012 = data_teams_2012.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2012, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,650])
fig.show()
In [19]:
fig7 = go.Figure()
fig8 = go.Figure()

for i in constructors:
    d = data_teams_2012.where(data_teams_2012['constructor_name'] == i).dropna()
    
    fig7.add_trace(go.Scatter(x=d['name'],
                              y=d['points'],
                              name=i,
                              mode='lines+markers',
                              marker=dict(color=teams_color_2012[i]['color'],opacity=0.75)))
    
    fig8.add_trace(go.Scatter(x=d['name'],
                              y=d['position'],
                              name=i,
                              mode='lines+markers',
                              hovertext=d.points,
                              marker=dict(color=teams_color_2012[i]['color'],opacity=0.75)))
fig7.show()
In [20]:
fig8['layout']['yaxis']['autorange'] = "reversed"
fig8.show()
In [21]:
teams_color_2013 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2013 = {'VET':dict(color='#004c6c',dash='solid'),
                           'WEB':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'PER':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'MAS':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'RAI':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           'KOV':dict(color='#000000',dash='dashdot'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAL':dict(color='#0082FA',dash='dash'),
                           
                           'SUT':dict(color='#F596C8',dash='solid'),
                           'DIR':dict(color='#F596C8',dash='dash'),
                           
                           'HUL':dict(color='#960000',dash='solid'),
                           'GUT':dict(color='#960000',dash='dash'),
                           
                           'RIC':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'PIC':dict(color='#3c5749',dash='solid'),
                           'VDG':dict(color='#3c5749',dash='dash'),
                           
                           'BIA':dict(color='#6E0000',dash='solid'),
                           'CHI':dict(color='#6E0000',dash='dash')
                         }
In [22]:
data_2013 = races_data.where(races_data['year']==2013).dropna()
data_2013 = data_2013.merge(diverstanding_data,on='raceId').dropna()
data_2013 = data_2013.merge(drivers_data,on='driverId').dropna()
data_2013.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2013 = data_2013.sort_values(['round','position'])
data_2013 = data_2013.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2013.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2013 = data_2013.merge(constructors_data,on='constructorId')
data_2013
drivers = data_2013['code'].unique()
In [23]:
c = data_2013.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2013 = data_2013.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2013, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,300])
fig.show()
In [24]:
fig9 = go.Figure()
fig10 = go.Figure()
for i in drivers:
    d = data_2012.where(data_2013['code'] == i).dropna().sort_values(by='round') 
    
    fig9.add_traces(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=driver_teams_color_2013[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2013[i]['dash'])))
    
    fig10.add_traces(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=driver_teams_color_2013[i]['color'],
                                          opacity=0.75),
                               line=dict(dash=driver_teams_color_2013[i]['dash'])))
fig9.show()
In [25]:
fig10['layout']['yaxis']['autorange'] = "reversed"
fig10.show()
In [26]:
data_teams_2013 = races_data.where(races_data['year']==2013).dropna()
data_teams_2013 = data_teams_2013.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2013 = data_teams_2013.merge(constructors_data,on='constructorId').dropna()
data_teams_2013.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2013 = data_teams_2013.sort_values(['round','position'])

constructors = data_teams_2013['constructor_name'].unique()
data_teams_2013
Out[26]:
year round circuitId name points position positionText wins constructorRef constructor_name
19 2013.0 1.0 1.0 Australian Grand Prix 30.0 1 1 0 ferrari Ferrari
0 2013.0 1.0 1.0 Australian Grand Prix 26.0 2 2 1 lotus_f1 Lotus F1
38 2013.0 1.0 1.0 Australian Grand Prix 23.0 3 3 0 red_bull Red Bull
57 2013.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 mercedes Mercedes
76 2013.0 1.0 1.0 Australian Grand Prix 10.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
151 2013.0 19.0 18.0 Brazilian Grand Prix 57.0 7 7 0 sauber Sauber
132 2013.0 19.0 18.0 Brazilian Grand Prix 33.0 8 8 0 toro_rosso Toro Rosso
170 2013.0 19.0 18.0 Brazilian Grand Prix 5.0 9 9 0 williams Williams
189 2013.0 19.0 18.0 Brazilian Grand Prix 0.0 10 10 0 marussia Marussia
208 2013.0 19.0 18.0 Brazilian Grand Prix 0.0 11 11 0 caterham Caterham

209 rows × 10 columns

In [27]:
c = data_teams_2013.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2013 = data_teams_2013.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2013, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,600])
fig.show()
In [28]:
fig11 = go.Figure()
fig12 = go.Figure()

for i in constructors:
    d = data_teams_2013.where(data_teams_2013['constructor_name'] == i).dropna()
    
    fig11.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2013[i]['color'],opacity=0.75)))
    
    fig12.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2013[i]['color'],opacity=0.75)))
fig11.show()
In [29]:
fig12['layout']['yaxis']['autorange'] = "reversed"
fig12.show()
In [30]:
teams_color_2014 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000'),
                    'Caterham':dict(color='#3c5749')
                   }

driver_teams_color_2014 = {'VET':dict(color='#004c6c',dash='solid'),
                           'RIC':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'MAG':dict(color='#FF8700',dash='dash'),
                           
                           'ALO':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'MAL':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'SUT':dict(color='#960000',dash='solid'),
                           'GUT':dict(color='#960000',dash='dash'),
                           
                           'KVY':dict(color='#011AE3',dash='solid'),
                           'VER':dict(color='#011AE3',dash='dash'),
                           
                           'ERI':dict(color='#3c5749',dash='solid'),
                           'STE':dict(color='#3c5749',dash='dash'),
                           'KOB':dict(color='#3c5749',dash='dashdot'),
                           'LOT':dict(color='#3c5749',dash='dot'),
                           
                           'BIA':dict(color='#6E0000',dash='solid'),
                           'CHI':dict(color='#6E0000',dash='dash')
                         }
In [31]:
data_2014 = races_data.where(races_data['year']==2014).dropna()
data_2014 = data_2014.merge(diverstanding_data,on='raceId').dropna()
data_2014 = data_2014.merge(drivers_data,on='driverId').dropna()
data_2014.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2014 = data_2014.sort_values(['round','position'])
data_2014 = data_2014.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2014.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2014 = data_2014.merge(constructors_data,on='constructorId')
data_2014
drivers = data_2014['code'].unique()
In [32]:
c = data_2014.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2014 = data_2014.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2014, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [33]:
fig13 = go.Figure()
fig14 = go.Figure()
for i in drivers:
    d = data_2014.where(data_2014['code'] == i).dropna().sort_values(by='round') 
    
    fig13.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2014[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2014[i]['dash'])))
    
    fig14.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2014[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2014[i]['dash'])))
fig13.show()
In [34]:
fig14['layout']['yaxis']['autorange'] = "reversed"
fig14.show()
In [35]:
data_teams_2014 = races_data.where(races_data['year']==2014).dropna()
data_teams_2014 = data_teams_2014.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2014 = data_teams_2014.merge(constructors_data,on='constructorId').dropna()
data_teams_2014.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2014 = data_teams_2014.sort_values(['round','position'])

constructors = data_teams_2014['constructor_name'].unique()
data_teams_2014
Out[35]:
year round circuitId name points position positionText wins constructorRef constructor_name
171 2014.0 1.0 1.0 Australian Grand Prix 33.0 1 1 0 mclaren McLaren
190 2014.0 1.0 1.0 Australian Grand Prix 25.0 2 2 1 mercedes Mercedes
152 2014.0 1.0 1.0 Australian Grand Prix 18.0 3 3 0 ferrari Ferrari
133 2014.0 1.0 1.0 Australian Grand Prix 10.0 4 4 0 williams Williams
114 2014.0 1.0 1.0 Australian Grand Prix 9.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
113 2014.0 19.0 24.0 Abu Dhabi Grand Prix 30.0 7 7 0 toro_rosso Toro Rosso
75 2014.0 19.0 24.0 Abu Dhabi Grand Prix 10.0 8 8 0 lotus_f1 Lotus F1
56 2014.0 19.0 24.0 Abu Dhabi Grand Prix 2.0 9 9 0 marussia Marussia
94 2014.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 10 10 0 sauber Sauber
37 2014.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 11 11 0 caterham Caterham

209 rows × 10 columns

In [36]:
c = data_teams_2014.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2014 = data_teams_2014.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2014, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [37]:
fig15 = go.Figure()
fig16 = go.Figure()

for i in constructors:
    d = data_teams_2014.where(data_teams_2014['constructor_name'] == i).dropna()
    
    fig15.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2014[i]['color'],opacity=0.75)))
    
    fig16.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2014[i]['color'],opacity=0.75)))
fig15.show()
In [38]:
fig16['layout']['yaxis']['autorange'] = "reversed"
fig16.show()
In [39]:
teams_color_2015 = {'Red Bull':dict(color='#004c6c'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Manor Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Lotus F1':dict(color='#000000'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2015 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'KVY':dict(color='#004c6c',dash='dash'),
                           
                           'BUT':dict(color='#FF8700',dash='solid'),
                           'ALO':dict(color='#FF8700',dash='dash'),
                           'MAG':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'MAL':dict(color='#000000',dash='solid'),
                           'GRO':dict(color='#000000',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'NAS':dict(color='#960000',dash='dash'),
                           
                           'VER':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           
                           'STE':dict(color='#6E0000',dash='solid'),
                           'MER':dict(color='#6E0000',dash='dash'),
                           'RSS':dict(color='#6E0000',dash='dashdot')
                         }
In [40]:
data_2015 = races_data.where(races_data['year']==2015).dropna()
data_2015 = data_2015.merge(diverstanding_data,on='raceId').dropna()
data_2015 = data_2015.merge(drivers_data,on='driverId').dropna()
data_2015.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2015 = data_2015.sort_values(['round','position'])
data_2015 = data_2015.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2015.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2015 = data_2015.merge(constructors_data,on='constructorId')
data_2015
drivers = data_2015['code'].unique()
In [41]:
c = data_2015.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2015 = data_2015.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2015, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [42]:
fig17 = go.Figure()
fig18 = go.Figure()
for i in drivers:
    d = data_2015.where(data_2015['code'] == i).dropna().sort_values(by='round') 
    
    fig17.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2015[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2015[i]['dash'])))
    
    fig18.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2015[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2015[i]['dash'])))
fig17.show()
In [43]:
fig18['layout']['yaxis']['autorange'] = "reversed"
fig18.show()
In [44]:
data_teams_2015 = races_data.where(races_data['year']==2015).dropna()
data_teams_2015 = data_teams_2015.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2015 = data_teams_2015.merge(constructors_data,on='constructorId').dropna()
data_teams_2015.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2015 = data_teams_2015.sort_values(['round','position'])

constructors = data_teams_2015['constructor_name'].unique()
data_teams_2015
Out[44]:
year round circuitId name points position positionText wins constructorRef constructor_name
5 2015.0 1.0 1.0 Australian Grand Prix 43.0 1 1 1 mercedes Mercedes
24 2015.0 1.0 1.0 Australian Grand Prix 15.0 2 2 0 ferrari Ferrari
62 2015.0 1.0 1.0 Australian Grand Prix 14.0 3 3 0 sauber Sauber
43 2015.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 williams Williams
81 2015.0 1.0 1.0 Australian Grand Prix 8.0 5 5 0 red_bull Red Bull
... ... ... ... ... ... ... ... ... ... ...
170 2015.0 19.0 24.0 Abu Dhabi Grand Prix 78.0 6 6 0 lotus_f1 Lotus F1
132 2015.0 19.0 24.0 Abu Dhabi Grand Prix 67.0 7 7 0 toro_rosso Toro Rosso
75 2015.0 19.0 24.0 Abu Dhabi Grand Prix 36.0 8 8 0 sauber Sauber
151 2015.0 19.0 24.0 Abu Dhabi Grand Prix 27.0 9 9 0 mclaren McLaren
188 2015.0 19.0 24.0 Abu Dhabi Grand Prix 0.0 10 10 0 manor Manor Marussia

189 rows × 10 columns

In [45]:
c = data_teams_2015.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2015 = data_teams_2015.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2015, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,750])
fig.show()
In [46]:
fig19 = go.Figure()
fig20 = go.Figure()

for i in constructors:
    d = data_teams_2015.where(data_teams_2015['constructor_name'] == i).dropna()
    
    fig19.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2015[i]['color'],opacity=0.75)))
    
    fig20.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2015[i]['color'],opacity=0.75)))
fig19.show()
In [47]:
fig20['layout']['yaxis']['autorange'] = "reversed"
fig20.show()
In [48]:
teams_color_2016 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Manor Marussia':dict(color='#6E0000'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2016 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'KVY':dict(color='#004c6c',dash='dash'),
                           'VER':dict(color='#004c6c',dash='dashdot'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           'BUT':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'ROS':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'GUT':dict(color='#ed1a3b',dash='dash'),
                           
                           'BOT':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'HUL':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'NAS':dict(color='#960000',dash='dash'),
                           
                           'VER':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           
                           'HAR':dict(color='#6E0000',dash='solid'),
                           'WEH':dict(color='#6E0000',dash='dash'),
                           'OCO':dict(color='#6E0000',dash='dashdot'),
                           
                           'MAG':dict(color='#FFF500',dash='solid'),
                           'PAL':dict(color='#FFF500',dash='dash')
                         }
In [49]:
data_2016 = races_data.where(races_data['year']==2016).dropna()
data_2016 = data_2016.merge(diverstanding_data,on='raceId').dropna()
data_2016 = data_2016.merge(drivers_data,on='driverId').dropna()
data_2016.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2016 = data_2016.sort_values(['round','position'])
data_2016 = data_2016.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2016.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2016 = data_2016.merge(constructors_data,on='constructorId')
data_2016
drivers = data_2016['code'].unique()
In [50]:
c = data_2016.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2016 = data_2016.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2016, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [51]:
fig21 = go.Figure()
fig22 = go.Figure()
for i in drivers:
    d = data_2016.where(data_2016['code'] == i).dropna().sort_values(by='round') 
    
    fig21.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2016[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2016[i]['dash'])))
    
    fig22.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2016[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2016[i]['dash'])))
fig21.show()
In [52]:
fig22['layout']['yaxis']['autorange'] = "reversed"
fig22.show()
In [53]:
data_teams_2016 = races_data.where(races_data['year']==2016).dropna()
data_teams_2016 = data_teams_2016.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2016 = data_teams_2016.merge(constructors_data,on='constructorId').dropna()
data_teams_2016.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2016 = data_teams_2016.sort_values(['round','position'])

constructors = data_teams_2016['constructor_name'].unique()
data_teams_2016
Out[53]:
year round circuitId name points position positionText wins constructorRef constructor_name
42 2016.0 1.0 1.0 Australian Grand Prix 43.0 1 1 1 mercedes Mercedes
210 2016.0 1.0 1.0 Australian Grand Prix 15.0 2 2 0 ferrari Ferrari
168 2016.0 1.0 1.0 Australian Grand Prix 14.0 3 3 0 williams Williams
189 2016.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 red_bull Red Bull
147 2016.0 1.0 1.0 Australian Grand Prix 8.0 5 5 0 haas Haas F1 Team
... ... ... ... ... ... ... ... ... ... ...
125 2016.0 21.0 24.0 Abu Dhabi Grand Prix 63.0 7 7 0 toro_rosso Toro Rosso
167 2016.0 21.0 24.0 Abu Dhabi Grand Prix 29.0 8 8 0 haas Haas F1 Team
104 2016.0 21.0 24.0 Abu Dhabi Grand Prix 8.0 9 9 0 renault Renault
20 2016.0 21.0 24.0 Abu Dhabi Grand Prix 2.0 10 10 0 sauber Sauber
41 2016.0 21.0 24.0 Abu Dhabi Grand Prix 1.0 11 11 0 manor Manor Marussia

231 rows × 10 columns

In [54]:
c = data_teams_2016.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2016 = data_teams_2016.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2016, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,800])
fig.show()
In [55]:
fig23 = go.Figure()
fig24 = go.Figure()

for i in constructors:
    d = data_teams_2016.where(data_teams_2016['constructor_name'] == i).dropna()
    
    fig23.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,mode='lines+markers',
                               marker=dict(color=teams_color_2016[i]['color'],opacity=0.75)))
    
    fig24.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2016[i]['color'],opacity=0.75)))
fig23.show()
In [56]:
fig24['layout']['yaxis']['autorange'] = "reversed"
fig24.show()
In [57]:
teams_color_2017 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2017 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'VER':dict(color='#004c6c',dash='dashdot'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           'BUT':dict(color='#FF8700',dash='dashdot'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'STR':dict(color='#0082FA',dash='solid'),
                           'MAS':dict(color='#0082FA',dash='dash'),
                           'DIR':dict(color='#0082FA',dash='dashdot'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'OCO':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'WEH':dict(color='#960000',dash='dash'),
                           'GIO':dict(color='#960000',dash='dashdot'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'SAI':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           'HAR':dict(color='#011AE3',dash='dot'),
                           
                           'HUL':dict(color='#FFF500',dash='solid'),
                           'PAL':dict(color='#FFF500',dash='dash'),
                           'SAI':dict(color='#FFF500',dash='dashdot')
                         }
In [58]:
data_2017 = races_data.where(races_data['year']==2017).dropna()
data_2017 = data_2017.merge(diverstanding_data,on='raceId').dropna()
data_2017 = data_2017.merge(drivers_data,on='driverId').dropna()
data_2017.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2017 = data_2017.sort_values(['round','position'])
data_2017 = data_2017.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2017.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2017 = data_2017.merge(constructors_data,on='constructorId')
data_2017
drivers = data_2017['code'].unique()
In [59]:
c = data_2017.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2017 = data_2017.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2017, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,400])
fig.show()
In [60]:
fig25 = go.Figure()
fig26 = go.Figure()
for i in drivers:
    d = data_2017.where(data_2017['code'] == i).dropna().sort_values(by='round') 
    
    fig25.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2017[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2017[i]['dash'])))
    
    fig26.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2017[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2017[i]['dash'])))
fig25.show()
In [61]:
fig26['layout']['yaxis']['autorange'] = "reversed"
fig26.show()
In [62]:
data_teams_2017 = races_data.where(races_data['year']==2017).dropna()
data_teams_2017 = data_teams_2017.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2017 = data_teams_2017.merge(constructors_data,on='constructorId').dropna()
data_teams_2017.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2017 = data_teams_2017.sort_values(['round','position'])

constructors = data_teams_2017['constructor_name'].unique()
data_teams_2017
Out[62]:
year round circuitId name points position positionText wins constructorRef constructor_name
0 2017.0 1.0 1.0 Australian Grand Prix 37.0 1 1 1 ferrari Ferrari
20 2017.0 1.0 1.0 Australian Grand Prix 33.0 2 2 0 mercedes Mercedes
40 2017.0 1.0 1.0 Australian Grand Prix 10.0 3 3 0 red_bull Red Bull
60 2017.0 1.0 1.0 Australian Grand Prix 8.0 4 4 0 williams Williams
80 2017.0 1.0 1.0 Australian Grand Prix 7.0 5 5 0 force_india Force India
... ... ... ... ... ... ... ... ... ... ...
139 2017.0 20.0 24.0 Abu Dhabi Grand Prix 57.0 6 6 0 renault Renault
119 2017.0 20.0 24.0 Abu Dhabi Grand Prix 53.0 7 7 0 toro_rosso Toro Rosso
199 2017.0 20.0 24.0 Abu Dhabi Grand Prix 47.0 8 8 0 haas Haas F1 Team
179 2017.0 20.0 24.0 Abu Dhabi Grand Prix 30.0 9 9 0 mclaren McLaren
159 2017.0 20.0 24.0 Abu Dhabi Grand Prix 5.0 10 10 0 sauber Sauber

200 rows × 10 columns

In [63]:
c = data_teams_2017.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2017 = data_teams_2017.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2017, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,700])
fig.show()
In [64]:
fig27 = go.Figure()
fig28 = go.Figure()

for i in constructors:
    d = data_teams_2017.where(data_teams_2017['constructor_name'] == i).dropna()
    
    fig27.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,mode='lines+markers',
                               marker=dict(color=teams_color_2017[i]['color'],opacity=0.75)))
    
    fig28.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2017[i]['color'],opacity=0.75)))

fig27.show()
In [65]:
fig28['layout']['yaxis']['autorange'] = "reversed"
fig28.show()
In [66]:
teams_color_2018 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Force India':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Sauber':dict(color='#960000')
                   }

driver_teams_color_2018 = {'RIC':dict(color='#004c6c',dash='solid'),
                           'VER':dict(color='#004c6c',dash='dash'),
                           
                           'ALO':dict(color='#FF8700',dash='solid'),
                           'VAN':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'RAI':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'STR':dict(color='#0082FA',dash='solid'),
                           'SIR':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'OCO':dict(color='#F596C8',dash='dash'),
                           
                           'ERI':dict(color='#960000',dash='solid'),
                           'LEC':dict(color='#960000',dash='dash'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'HAR':dict(color='#011AE3',dash='dash'),
                           
                           'HUL':dict(color='#FFF500',dash='solid'),
                           'SAI':dict(color='#FFF500',dash='dash')
                         }
In [67]:
data_2018 = races_data.where(races_data['year']==2018).dropna()
data_2018 = data_2018.merge(diverstanding_data,on='raceId').dropna()
data_2018 = data_2018.merge(drivers_data,on='driverId').dropna()
data_2018.drop(columns=['date','time','url_x','url_y','driverStandingsId','dob','number','nationality'],inplace=True)
data_2018 = data_2018.sort_values(['round','position'])
data_2018 = data_2018.merge(qualifying_data,on=['raceId','driverId']).dropna()
data_2018.drop(columns=['qualifyId','raceId','driverId'],inplace=True)
data_2018 = data_2018.merge(constructors_data,on='constructorId')
data_2018
drivers = data_2018['code'].unique()
In [68]:
c = data_2018.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2018 = data_2018.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2018, x="code", y="points", color="constructor_name",
  animation_frame="name", animation_group="code", range_y=[0,450])
fig.show()
In [69]:
fig29 = go.Figure()
fig30 = go.Figure()
for i in drivers:
    d = data_2018.where(data_2018['code'] == i).dropna().sort_values(by='round') 
    
    fig29.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2018[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2018[i]['dash'])))
    
    fig30.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2018[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2018[i]['dash'])))
fig29.show()
In [70]:
fig30['layout']['yaxis']['autorange'] = "reversed"
fig30.show()
In [71]:
data_teams_2018 = races_data.where(races_data['year']==2018).dropna()
data_teams_2018 = data_teams_2018.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2018 = data_teams_2018.merge(constructors_data,on='constructorId').dropna()
data_teams_2018.drop(columns=['date','time','url','constructorStandingsId','constructorId','constructor_nationality','raceId'],inplace=True)
data_teams_2018 = data_teams_2018.sort_values(['round','position'])

constructors = data_teams_2018['constructor_name'].unique()
data_teams_2018
Out[71]:
year round circuitId name points position positionText wins constructorRef constructor_name
0 2018.0 1.0 1.0 Australian Grand Prix 40.0 1 1 1 ferrari Ferrari
21 2018.0 1.0 1.0 Australian Grand Prix 22.0 2 2 0 mercedes Mercedes
42 2018.0 1.0 1.0 Australian Grand Prix 20.0 3 3 0 red_bull Red Bull
63 2018.0 1.0 1.0 Australian Grand Prix 12.0 4 4 0 mclaren McLaren
84 2018.0 1.0 1.0 Australian Grand Prix 7.0 5 5 0 renault Renault
... ... ... ... ... ... ... ... ... ... ...
83 2018.0 21.0 24.0 Abu Dhabi Grand Prix 62.0 6 6 0 mclaren McLaren
125 2018.0 21.0 24.0 Abu Dhabi Grand Prix 52.0 7 7 0 force_india Force India
146 2018.0 21.0 24.0 Abu Dhabi Grand Prix 48.0 8 8 0 sauber Sauber
188 2018.0 21.0 24.0 Abu Dhabi Grand Prix 33.0 9 9 0 toro_rosso Toro Rosso
167 2018.0 21.0 24.0 Abu Dhabi Grand Prix 7.0 10 10 0 williams Williams

210 rows × 10 columns

In [72]:
c = data_teams_2018.groupby(by='constructor_name').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2018 = data_teams_2018.merge(c,on='constructor_name').sort_values(['round','Final'])

fig = px.bar(data_teams_2018, x="constructor_name", y="points",color='constructor_name',
  animation_frame="name", animation_group="constructor_name", range_y=[0,700])
fig.show()
In [73]:
fig31 = go.Figure()
fig32 = go.Figure()

for i in constructors:
    d = data_teams_2018.where(data_teams_2018['constructor_name'] == i).dropna()
    
    fig31.add_trace(go.Scatter(x=d['name'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2018[i]['color'],opacity=0.75)))
    
    fig32.add_trace(go.Scatter(x=d['name'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2018[i]['color'],opacity=0.75)))
fig31.show()
In [74]:
fig32['layout']['yaxis']['autorange'] = "reversed"
fig32.show()
In [ ]:
teams_color_2019 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'Toro Rosso':dict(color='#011AE3'),
                    'Racing Point':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Alfa Romeo':dict(color='#960000')
                   }

driver_teams_color_2019 = {'VER':dict(color='#004c6c',dash='solid'),
                           'GAS':dict(color='#004c6c',dash='dash'),
                           'ALB':dict(color='#004c6c',dash='dashdot'),
                           
                           'SAI':dict(color='#FF8700',dash='solid'),
                           'NOR':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'LEC':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           
                           'RUS':dict(color='#0082FA',dash='solid'),
                           'KUB':dict(color='#0082FA',dash='dash'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'STR':dict(color='#F596C8',dash='dash'),
                           
                           'RAI':dict(color='#960000',dash='solid'),
                           'GIO':dict(color='#960000',dash='dash'),
                           
                           'ALB':dict(color='#011AE3',dash='solid'),
                           'GAS':dict(color='#011AE3',dash='dash'),
                           'KVY':dict(color='#011AE3',dash='dashdot'),
                           
                           'RIC':dict(color='#FFF500',dash='solid'),
                           'HUL':dict(color='#FFF500',dash='dash')
                         }
In [ ]:
data_2019 = races_data.where(races_data['year']==2019).dropna()
data_2019 = data_2019.merge(diverstanding_data,on='raceId').dropna()
data_2019 = data_2019.merge(drivers_data,on='driverId').dropna()
data_2019.drop(columns=['date','time','url_x','url_y','driverStandingsId','driverId','dob','number','nationality','raceId'],inplace=True)
data_2019 = data_2019.sort_values(['round','position'])
data_2019
drivers = data_2019['code'].unique()
In [ ]:
c = data_2019.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2019 = data_2019.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2019, x="code", y="points", color="code",
  animation_frame="name", animation_group="code", range_y=[0,450])
fig.show()
In [ ]:
fig33 = go.Figure()
fig34 = go.Figure()
for i in drivers:
    d = data_2019.where(data_2019['code'] == i).dropna().sort_values(by='round')
    
    fig33.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2019[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2019[i]['dash'])))
    
    fig34.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2019[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2019[i]['dash'])))
fig33.show()
In [ ]:
fig34['layout']['yaxis']['autorange'] = "reversed"
fig34.show()
In [ ]:
data_teams_2019 = races_data.where(races_data['year']==2019).dropna()
data_teams_2019 = data_teams_2019.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2019 = data_teams_2019.merge(constructors_data,on='constructorId').dropna()
data_teams_2019.drop(columns=['date','time','url_x','url_y','constructorStandingsId','constructorId','nationality','raceId'],inplace=True)
data_teams_2019 = data_teams_2019.sort_values(['round','position'])
constructors = data_teams_2019['name_y'].unique()
data_teams_2019
In [ ]:
c = data_teams_2019.groupby(by='name_y').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2019 = data_teams_2019.merge(c,on='name_y').sort_values(['round','Final'])

fig = px.bar(data_teams_2019, x="name_y", y="points",color='name_y',
  animation_frame="name_x", animation_group="name_y", range_y=[0,750])
fig.show()
In [ ]:
fig35 = go.Figure()
fig36 = go.Figure()

for i in constructors:
    d = data_teams_2019.where(data_teams_2019['name_y'] == i).dropna()
    
    fig35.add_trace(go.Scatter(x=d['name_x'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2019[i]['color'],opacity=0.75)))
    
    fig36.add_trace(go.Scatter(x=d['name_x'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2019[i]['color'],opacity=0.75)))
fig35.show()
In [ ]:
fig36['layout']['yaxis']['autorange'] = "reversed"
fig36.show()
In [ ]:
teams_color_2020 = {'Red Bull':dict(color='#004c6c'),
                    'Renault':dict(color='#FFF500'),
                    'McLaren':dict(color='#FF8700'),
                    'Ferrari':dict(color='#C00000'),
                    'Mercedes':dict(color='#00D2BE'),
                    'Williams':dict(color='#0082FA'),
                    'AlphaTauri':dict(color='#011AE3'),
                    'Racing Point':dict(color='#F596C8'),
                    'Haas F1 Team':dict(color='#ed1a3b'),
                    'Alfa Romeo':dict(color='#960000')
                   }

driver_teams_color_2020 = {'VER':dict(color='#004c6c',dash='solid'),
                           'ALB':dict(color='#004c6c',dash='dashdot'),
                           
                           'SAI':dict(color='#FF8700',dash='solid'),
                           'NOR':dict(color='#FF8700',dash='dash'),
                           
                           'VET':dict(color='#C00000',dash='solid'),
                           'LEC':dict(color='#C00000',dash='dash'),
                           
                           'HAM':dict(color='#00D2BE',dash='solid'),
                           'BOT':dict(color='#00D2BE',dash='dash'),
                           'RUS':dict(color='#00D2BE',dash='dashdot'),
                           
                           'GRO':dict(color='#ed1a3b',dash='solid'),
                           'MAG':dict(color='#ed1a3b',dash='dash'),
                           'FIT':dict(color='#ed1a3b',dash='dashdot'),
                           
                           'RUS':dict(color='#0082FA',dash='solid'),
                           'LAT':dict(color='#0082FA',dash='dash'),
                           'AIT':dict(color='#0082FA',dash='dashdot'),
                           
                           'PER':dict(color='#F596C8',dash='solid'),
                           'STR':dict(color='#F596C8',dash='dash'),
                           'HUL':dict(color='#F596C8',dash='dashdot'),
                           
                           'RAI':dict(color='#960000',dash='solid'),
                           'GIO':dict(color='#960000',dash='dash'),
                           
                           'GAS':dict(color='#011AE3',dash='solid'),
                           'KVY':dict(color='#011AE3',dash='dash'),
                           
                           'RIC':dict(color='#FFF500',dash='solid'),
                           'OCO':dict(color='#FFF500',dash='dash')
                         }
In [ ]:
data_2020 = races_data.where(races_data['year']==2020).dropna()
data_2020 = data_2020.merge(diverstanding_data,on='raceId').dropna()
data_2020 = data_2020.merge(drivers_data,on='driverId').dropna()
data_2020.drop(columns=['date','time','url_x','url_y','driverStandingsId','driverId','dob','number','nationality','raceId'],inplace=True)
data_2020 = data_2020.sort_values(['round','position'])
data_2020
drivers = data_2020['code'].unique()
In [ ]:
c = data_2020.groupby(by='code').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_2020 = data_2020.merge(c,on='code').sort_values(['round','Final'])


fig = px.bar(data_2020, x="code", y="points", color="code",
  animation_frame="name", animation_group="code", range_y=[0,350])
fig.show()
In [ ]:
fig37 = go.Figure()
fig38 = go.Figure()
for i in drivers:
    d = data_2020.where(data_2020['code'] == i).dropna().sort_values(by='round') 
    
    fig37.add_traces(go.Scatter(x=d['name'],
                                y=d['points'],
                                name=i,
                                mode='lines+markers',
                                marker=dict(color=driver_teams_color_2020[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2020[i]['dash'])))
    
    fig38.add_traces(go.Scatter(x=d['name'],
                                y=d['position'],
                                name=i,
                                mode='lines+markers',
                                hovertext=d.points,
                                marker=dict(color=driver_teams_color_2020[i]['color'],
                                          opacity=0.75),
                                line=dict(dash=driver_teams_color_2020[i]['dash'])))
fig37.show()
In [ ]:
fig38['layout']['yaxis']['autorange'] = "reversed"
fig38.show()
In [ ]:
data_teams_2020 = races_data.where(races_data['year']==2020).dropna()
data_teams_2020 = data_teams_2020.merge(constructorstanding_data,on='raceId').dropna()
data_teams_2020 = data_teams_2020.merge(constructors_data,on='constructorId').dropna()
data_teams_2020.drop(columns=['date','time','url_x','url_y','constructorStandingsId','constructorId','nationality','raceId'],inplace=True)
data_teams_2020 = data_teams_2020.sort_values(['round','position'])
constructors = data_teams_2020['name_y'].unique()
data_teams_2020
In [ ]:
c = data_teams_2020.groupby(by='name_y').max().sort_values('points',ascending=False)
c['Final'] = range(1,len(c['year'])+1)
c = c['Final']
data_teams_2020 = data_teams_2020.merge(c,on='name_y').sort_values(['round','Final'])

fig = px.bar(data_teams_2020, x="name_y", y="points",color='name_y',
  animation_frame="name_x", animation_group="name_y", range_y=[0,600])
fig.show()
In [ ]:
fig39 = go.Figure()
fig40 = go.Figure()

for i in constructors:
    d = data_teams_2020.where(data_teams_2020['name_y'] == i).dropna()
    
    fig39.add_trace(go.Scatter(x=d['name_x'],
                               y=d['points'],
                               name=i,
                               mode='lines+markers',
                               marker=dict(color=teams_color_2020[i]['color'],opacity=0.75)))
    
    fig40.add_trace(go.Scatter(x=d['name_x'],
                               y=d['position'],
                               name=i,
                               mode='lines+markers',
                               hovertext=d.points,
                               marker=dict(color=teams_color_2020[i]['color'],opacity=0.75)))
fig39.show()
In [ ]:
fig40['layout']['yaxis']['autorange'] = "reversed"
fig40.show()